package com.sojson.project.sys.sharding.dao;

import java.util.List;
import java.util.Map;

import org.apache.ibatis.annotations.Param;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.sojson.project.sys.sharding.entity.dto.DataTransferDto;
import com.sojson.project.sys.sharding.entity.po.DataTransfer;

/**
 * 数据归档信息Dao
 *
 * @author liu
 * @date 2022-10-24
 */
public interface DataTransferDao extends BaseMapper<DataTransfer> {

    /**
     * 获取数据库名
     *
     * @return
     */
    String getDatabaseName();

    /**
     * 判断表是否存在
     *
     * @param databaseName
     * @param tableName
     * @return
     */
    int tableIsExists(@Param("databaseName") String databaseName, @Param("tableName") String tableName);

    /**
     * 获取建表语句
     *
     * @param dto
     * @return
     */
    Map<String, String> getCreateTableSql(DataTransferDto dto);

    /**
     * 创建表
     *
     * @param sql
     * @return
     */
    int createTable(String sql);

    /**
     * 查询要迁移的字段
     *
     * @param dto
     */
    String getFields(DataTransferDto dto);

    /**
     * 获取数据列表
     *
     * @param dto
     * @return
     */
    List<Map<String, Object>> getDatas(DataTransferDto dto);

    /**
     * 保存数据
     *
     * @param dto
     * @param data
     * @return
     */
    int add(@Param("dto") DataTransferDto dto, @Param("data") Map<String, Object> data);

    /**
     * 保存数据
     *
     * @param dto
     * @param datas
     * @return
     */
    int save(@Param("dto") DataTransferDto dto, @Param("datas") List<Map<String, Object>> datas);

    /**
     * 保存或者修改数据
     *
     * @param dto
     * @param datas
     * @return
     */
    int saveOrUpdate(@Param("dto") DataTransferDto dto, @Param("datas") List<Map<String, Object>> datas);

    /**
     * 删除数据
     *
     * @param dto
     * @param id
     * @return
     */
    int removeById(@Param("dto") DataTransferDto dto, @Param("id") Object id);

    /**
     * 删除数据
     *
     * @param dto
     * @param ids
     * @return
     */
    int remove(@Param("dto") DataTransferDto dto, @Param("ids") List<Object> ids);

    /**
     * 修改上次归档时间
     *
     * @param dto
     */
    void updateLastTime(DataTransfer dto);

}